import { useRecoilState, useRecoilValue } from 'recoil';
import { userCenterDataState, userCenterDataLoadingState, userCenterDataErrorState, fetchUserCenterData } from '../state';
import { UserCenterData } from '../api/types';
import { useCallback } from 'react';

/**
 * 用户中心数据管理 Hook
 * 提供获取、更新用户中心数据的功能
 */
export const useUserCenter = () => {
  const [userCenterData, setUserCenterData] = useRecoilState(userCenterDataState);
  const [loading, setLoading] = useRecoilState(userCenterDataLoadingState);
  const [error, setError] = useRecoilState(userCenterDataErrorState);

  // 刷新用户中心数据 - 使用 useCallback 避免重新创建函数
  const refreshUserCenterData = useCallback(async () => {
    try {
      setError(null); // 清除之前的错误
      await fetchUserCenterData(setUserCenterData, setLoading, setError);
    } catch (error) {
      console.error('刷新用户中心数据失败:', error);
    }
  }, [setUserCenterData, setLoading, setError]);

  // 更新用户中心数据（局部更新）
  const updateUserCenterData = (updates: Partial<UserCenterData>) => {
    if (userCenterData) {
      setUserCenterData({ ...userCenterData, ...updates });
    }
  };

  // 更新用户信息
  const updateUserInfo = (userUpdates: Partial<UserCenterData['user']>) => {
    if (userCenterData) {
      setUserCenterData({
        ...userCenterData,
        user: { ...userCenterData.user, ...userUpdates }
      });
    }
  };

  return {
    userCenterData,
    loading,
    error,
    refreshUserCenterData,
    updateUserCenterData,
    updateUserInfo,
  };
};
